package com.my.jwt.simple.test1;

import cn.hutool.json.JSONObject;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.my.jwt.simple.JwtTokenUtil;
import com.my.jwt.simple.test1.anon.UserLoginToken;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @author timo 2021/3/19
 */
@RestController
@RequestMapping("api")
public class UserApi {
    @Autowired
    private JwtTokenUtil jwtTokenUtil;

    //登录
    @PostMapping("/login")
    public Object login(@RequestBody User user){
        JSONObject jsonObject=new JSONObject();
//        jsonObject.put("message","登录失败,用户不存在");
//        jsonObject.put("message","登录失败,密码错误");
        User userForBase = new User("1","admin","123");//取数据库的
//        String token = getToken(userForBase);
        String token = jwtTokenUtil.generateToken(userForBase.getId(),null);
        jsonObject.put("token", token);
        jsonObject.put("user", userForBase);
        return jsonObject;
    }
    @UserLoginToken
    @GetMapping("/getMessage")
    public String getMessage(){
        return "你已通过验证";
    }

    public static String getToken(User user) {
        //Algorithm.HMAC256():使用HS256生成token,密钥则是用户的密码，唯一密钥的话可以保存在服务端。
        //withAudience()存入需要保存在token的信息，这里我把用户ID存入token中
        String token="";
        token= JWT.create().withAudience(user.getId())
                .sign(Algorithm.HMAC256(user.getPassword()));
        return token;

    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class User {
        String Id;
        String username;
        String password;
    }

}
